package com.sherry.dao.impl;

import com.sherry.dao.IUserDao;
import com.sherry.model.User;
import com.sherry.utils.DBManager;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDaoImpl implements IUserDao {
//        操作数据库的三个心对象(定义在方法之外，就不用每个方法里都定义一次)
    //定义连接对象
    private Connection connection =null;
    //定义执行sql的对象
    private PreparedStatement psmt=null;
    //定义结果集的对象
    private ResultSet rs=null;
    @Override
    public User getUser(String acc, String pwd) {
//        这里输出的数据acc和pwd来自service层，service层调用该方法，传的参数
        System.out.println("dao层 acc="+acc+" pwd="+pwd);
        connection= DBManager.getConnByC3p0();
        User user=null; //用户信息
//        ?是占位符,数据库表名和字段名可以用``反引号包起来，比较不会报错
        String sql="select * from user where name= ? and password= ?";
        try{
//            设置执行对象
            psmt=connection.prepareStatement(sql);
            psmt.setString(1,acc);
            psmt.setString(2,pwd);

//            查询,注意前面的psmt=connection.prepareStatement(sql);
//            要传sql参数来预编译sql变量对应的这条sql语句,但执行查询这里就不用再传sql参数了
            rs=psmt.executeQuery();
//            如果查询有返回数据，处理数据
            if(rs.next()){
//                下面做的是，根据name和pwd有查到这个用户，
//                就定义一个User类的对象，把这个用户的各个属性信息都保存到这个user对象里
                user=new User();
//                setId()是java数据模型(model层)里的User类里的setter方法，
//                getInt("id")的id是数据库的字段
                user.setId(rs.getInt("id"));
//                user.setName(rs.getString("name"));
//                用这两种方法都可以，值都是一样的
                user.setName(acc);
                user.setPassword(pwd);
                user.setNickname(rs.getString("nickname"));

            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        System.out.println("dao层 acc="+acc+" pwd="+pwd +" user="+user);
        //返回给调用这个方法（service层）的对象
        return user;
    }
}
